import { cartList, changeCartItem } from '@/api/cart'
export default {
  // 先记得开命名空间
  namespaced: true,
  // 放数据的地方
  state () {
    return {
      // 这个list用来保存购物车数据
      list: [],
      count: 0
    }
  },

  getters: {
    totalCount (state) {
      //   return state.list.reduce((sum, v) => (sum += v.count), 0)
      let sum = 0
      state.list.forEach(v => {
        sum += v.count
      })
      return sum
    },
    totalPrice (state) {
      let sum = 0
      state.list.forEach(v => {
        sum += v.count * v.price
      })
      return sum
    }
  },

  // 放方法的地方
  mutations: {
    // 对list整体进行赋值
    setList (state, list) {
      // 把传递过来的数组赋值到state
      state.list = list
    },
    // 根据id找到某个数据，再修改这个数据的数量
    // 因为除了需要传入id，还要传入要修改的数量（+1，要么-1）
    // 而这里最多只能一个额外的参数，我要传2个，就传对象过来
    // 例如： { id: 1001, count: 1 }
    async changeCount (state, obj) {
      //   // 先根据id找到数据
      //   const item = state.list.find(v => {
      //     // 判断当前元素的id是否等于要找到的id
      //     if (v.id === obj.id) {
      //       // 代表找到了
      //       return true
      //     } else {
      //       return false
      //     }
      //   })

      const item = state.list.find(v => v.id === obj.id)
      item.count += obj.count
      // 发请求修改服务器
      await changeCartItem(item)
    }
  },
  //   放异步方法的地方
  actions: {
    async reqList (ctx) {
      const res = await cartList()
      ctx.commit('setList', res.data)
    }
  }
}
